package com._520it.crm.mapper;

import com._520it.crm.domain.DiclearInfo;
import com._520it.crm.domain.OrderBill;
import com._520it.crm.query.OrderBillQueryObject;
import com._520it.crm.query.QueryObject;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Repository
public interface OrderBillMapper {
    int deleteByPrimaryKey(Long id);

    Long insert(OrderBill orderBill);

    OrderBill selectByPrimaryKey(Long id);

    List<OrderBill> selectAll();

    int updateByPrimaryKey(OrderBill orderBill);

    /**
     *
     * @param qo 高级查询的参数
     * @return 返回查询的结果数
     */
    Integer queryforCount(QueryObject qo);

    /**
     *
     * @param qo 高级查询参数
     * @return 返回查询的结果集 集合
     */
    List<OrderBill> queryforList(QueryObject qo);

    Integer approvalQueryforCount(OrderBillQueryObject queryObject);

    List<OrderBill> approvalQueryforList(OrderBillQueryObject queryObject);

    /**
     * 跟新申请表单中的申请人信息 身份证号码
     * @param orderBillId 表单id
     * @param idCardNumber 申请人身份证号码
     */
    void updataApplyClientIdCardNumber(@Param("orderBillId") Long orderBillId,@Param("idCardNumber") String idCardNumber);

    /**
     * 跟新申请表单中的被保人信息 身份证号码
     * @param orderBillId 表单id
     * @param idCardNumber 被保人身份证号码
     */
    void updataRecognizeeIdCardNumber(@Param("orderBillId") Long orderBillId,@Param("idCardNumber") String idCardNumber);

    /**
     * 保存前台传过来的 保单的时间信息以及基本信息
     * @param orderBill 传过来的保单对象 包含有id
     */
    void updateTimeandBaseInfo(OrderBill orderBill);

    /**
     * 保存前台传过来的 客户车辆信息的id
     * @param orderBillId 前台传过来的保单id
     * @param clientCarIfoId 保存客户车辆信息之后获取的id
     */
    void updateClientCarInfo(@Param("orderBillId") Long orderBillId, @Param("clientCarIfoId") Long clientCarIfoId);

    /**
     * 维护保单和产品的中间表关系
     * @param id 保单id
     * @param productId 选择的产品的id
     */
    void insertRelationsToPro(@Param("id") Long id, @Param("productId") Long productId);

    void updateStateByinsurancePolicyNumber(@Param("insurancePolicyNumber") String insurancePolicyNumber, @Param("state") int stateSqhb);

    BigDecimal querySpand(String insurancePolicyNumber);

    OrderBill queryInsuranceReturn(int state);

    void tempSave(@Param("stateZc") int stateZc, @Param("id") Long id,@Param("correctUserSn") String employeeSn);

    /**
     * 更新相应保单各个流程的状态
     * @param orderBillId 保单id
     * @param stateNo  保单状态
     */
    void updateStateAndRemark(@Param("orderBillId")Long orderBillId,@Param("stateNo")Integer stateNo,@Param("remark")String remark);

    /**
     * 表单申请批改的方法
     * @param orderId 表单id
     * @param remark 提交申请说明
     */
    void checkApply(@Param("orderId") Long orderId , @Param("remark") String remark, @Param("applicationTime") Date date);

    /**
     * 表单提交续保申请 将表单状态修改为40
     * @param orderBillId 要修改状态的表单id
     */
    void changeState(Long orderBillId);


    //保存退回备注
    void updateRemark(OrderBill bill);

    //修改备注
    void updateState(OrderBill bill);

    //根据ID查询对应的明细:用于审核成功页面弹框
    OrderBill queryDetailData(Long id);
    /**
     * 根据表单id查询 相关的审核流程详细信息
     * @param id 表单id
     * @return
     */
    DiclearInfo selectDiclearInfo(Long id);
}